import Qs from 'qs'
import Vue from 'vue'
import jwt_decode from "jwt-decode"

/*
$.ajax({
  type: "POST",
  url: "/user/list",
  data: {
    key: value,
    key2: value2
  },
  success: function(data) {

  }
});

{
      method: param.type ? param.type : "GET",
      url: "http://localhost:8080" + param.url,
      //GET
      params: param.data

      //POST
      transformRequest: [function (data) {
        return Qs.stringify(data)
      }],
      data: param.data
    }
*/
export default {
  ajax(param){
    //设置axios的请求参数
    var axiosParam = {};
    //设置method的属性
    axiosParam.method = param.type ? param.type : "GET";
    //设置url属性
    axiosParam.url = "http://localhost" + param.url;
    //设置参数的属性
    if(param.data) {
      if(param.type && param.type == "POST"){
        //发送post请求
        axiosParam.transformRequest = [function (data) {
          return Qs.stringify(data)
        }];
        axiosParam.data = param.data;
      } else {
        //发送get请求
        axiosParam.params = param.data;
      }
    }

    //准备一个请求头
    var header = {};
    //额外设置两个参数 1、登录的令牌  2、fromType - 0
    header.fromType = 0;
    var jwtToken = this.getUserToken();
    if(jwtToken){
      //有登录令牌
      header.loginToken = jwtToken;
    }
    axiosParam.headers = header;

    Vue.axios(axiosParam).then((result) => {
      console.log("请求成功！", result.data.data);
      if(param.success) {
        //调用success方法
        param.success(result.data.data, result.data.page);
      }
    }).catch((result) => {
      console.log("请求失败！", result.response.data);

      if(result.response.data.code == 406){
        //强制跳转到登录页面
        // Vue.$router.push("/");
      }

      if(result.response.data.msg) {
        //弹窗将错误信息弹出
        Vue.prototype.$message.error(result.response.data.msg + (result.response.data.data ? result.response.data.data : ""));
      } else {
        Vue.prototype.$message.error("服务器繁忙，请稍后再试！");
      }
    });
  },
  saveUserToken(jwtToken){
    //保存jwt令牌到浏览器本地
    localStorage.setItem("userToken", jwtToken);
  },
  getUserToken(){
    //返回jwt令牌
    return localStorage.getItem("userToken");
  },
  parseJwtToken(jwtToken){
    //解析jwtToken
    var userInfo = jwt_decode(jwtToken).user;
    console.log("解析jwt令牌:", userInfo);
    return userInfo;
  },
  //如果拥有了url权限，该方法会返回true
  hasPower(url) {
    //获得登录令牌
    var token = this.getUserToken();
    var json = JSON.parse(this.parseJwtToken(token));
    //获取所有拥有的
    var powers = json.powers;
    if(powers){
      //遍历拥有的权限
      for(var i = 0; i < powers.length; i++){
        var power = powers[i];
        if(power.powerRes == url) {
          return true;
        }
      }
    }
    return false;
  }
}
